// 权限拦截在路由跳转 导航守卫
import router from "@/router";
import store from "@/store";
import NProgress from "nprogress"; // 引入一份进度条插件
import "nprogress/nprogress.css"; // 引入进度条样式
// 不需要导出 因为只需要让代码执行即可 前置守卫
// next是前置守卫必须执行的钩子，next必须执行 如果不执行 页面就死了
// next (false)跳转终止  next(地址)跳转到某个地址
const whiteList = ["/login", "/404"];
router.beforeEach(async (to, from, next) => {
  NProgress.start(); // 开启进度条
  if (store.getters.token) {
    //   有token 才能获取资料
    if (to.path === "/login") {
      // 如果要访问的是登录页
      next("/"); // 跳到主页
    } else {
      // 只有放过去的时候才去获取用户资料 获取用户资料写在这里，有token且去的不是登录页
      if (!store.getters.userId) {
        // 如果当前vuex中有用户的资料，不需要获取了，没有id才需要获取
        await store.dispatch("user/getUserInfo");
      }
      next(); // 直接放行
    }
  } else {
    //   没有token
    if (whiteList.indexOf(to.path) > -1) {
      // 如果找到了 表示在在名单里面
      next();
    } else {
      next("/login"); // 跳到登录页
    }
  }
  NProgress.done(); // 手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题
});
// 后置守卫
router.afterEach(function() {
  NProgress.done(); // 开启进度条
});
